package com.sheng.leetcode.year2023.month09.day26;

import org.junit.Test;

/**
 * @author by ls
 * @date 2023/9/26
 * <p>
 * 2582. 递枕头<p>
 * <p>
 * n 个人站成一排，按从 1 到 n 编号。<p>
 * 最初，排在队首的第一个人拿着一个枕头。每秒钟，拿着枕头的人会将枕头传递给队伍中的下一个人。<p>
 * 一旦枕头到达队首或队尾，传递方向就会改变，队伍会继续沿相反方向传递枕头。<p>
 * 例如，当枕头到达第 n 个人时，TA 会将枕头传递给第 n - 1 个人，然后传递给第 n - 2 个人，依此类推。<p>
 * 给你两个正整数 n 和 time ，返回 time 秒后拿着枕头的人的编号。<p>
 * <p>
 * 示例 1：<p>
 * 输入：n = 4, time = 5<p>
 * 输出：2<p>
 * 解释：队伍中枕头的传递情况为：1 -> 2 -> 3 -> 4 -> 3 -> 2 。<p>
 * 5 秒后，枕头传递到第 2 个人手中。<p>
 * <p>
 * 示例 2：<p>
 * 输入：n = 3, time = 2<p>
 * 输出：3<p>
 * 解释：队伍中枕头的传递情况为：1 -> 2 -> 3 。<p>
 * 2 秒后，枕头传递到第 3 个人手中。<p>
 * <p>
 * 提示：<p>
 * 2 <= n <= 1000<p>
 * 1 <= time <= 1000<p>
 */
public class LeetCode2582 {

    @Test
    public void test01() {
//        int n = 4, time = 5;
        int n = 3, time = 2;
        System.out.println(new Solution().passThePillow(n, time));
    }
}

class Solution {
    public int passThePillow(int n, int time) {
        // m 代表从第一个人开始，再传到第一个人需要的秒数
        int m = 2 * n - 2;
        time %= m;
        return time <= n - 1 ? 1 + time : n - time + n - 1;
    }
}
